package com.gpt.article.service.impl.taskHandle.task;

import chatgpt.ChatGPT;
import chatgpt.entity.chat.ChatCompletion;
import chatgpt.entity.chat.ChatCompletionResponse;
import chatgpt.entity.chat.Message;
import com.gpt.article.domain.QContent;
import com.gpt.article.service.IAContentService;
import com.gpt.article.service.IQContentService;
import com.ruoyi.common.core.domain.entity.SysDictData;
import com.ruoyi.system.service.ISysDictTypeService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class GenAContentTasker {
//    private static Logger logger = LoggerFactory.getLogger(GenAContentTasker.class);
//    private static ChatCompletion chatCompletion;
//
//    private static IQContentService qContentService;
//
//    private static IAContentService aContentService;
//    private static ISysDictTypeService sysDictTypeService;
//
//    private static int tokenCount = 0;
//
//    private static int completAContentNum = 0;
//    private static int completQContentNum = 0;
//
//    private static int excuGenCount = 0;
//
//    private Integer tryCount = 0;
//    public static int getCompletAContentNum() {
//        return completAContentNum;
//    }
//
//    public static void setCompletAContentNum(int completAContentNum) {
//        GenAContentTasker.completAContentNum = completAContentNum;
//    }
//
//    public static int getCompletQContentNum() {
//        return completQContentNum;
//    }
//
//    public static void setCompletQContentNum(int completQContentNum) {
//        GenAContentTasker.completQContentNum = completQContentNum;
//    }
//
//    public static int getExcuGenCount() {
//        return excuGenCount;
//    }
//
//    public static void setExcuGenCount(int excuGenCount) {
//        GenAContentTasker.excuGenCount = excuGenCount;
//    }
//
//    //    private static QContent qContent;
//    @Autowired
//    public void setISysDictTypeService(ISysDictTypeService sysDictTypeService) {
//        GenAContentTasker.sysDictTypeService = sysDictTypeService;
//    }
//
//    @Autowired
//    public void setIQContentService(IQContentService qContentService) {
//        GenAContentTasker.qContentService = qContentService;
//    }
//    @Autowired
//    public void setIAContentService(IAContentService aContentService) {
//        GenAContentTasker.aContentService = aContentService;
//    }
//
//
//    /**
//     *
//     * 生成工作
//     *
//     * @param qContent
//     *
//     * @param dictModellist
//     * @param psMap
//     *  String qcontentId = psMap.get("qcontentId").toString();
//     *         String creteBy = psMap.get("creteBy").toString();
//     *         Integer allNum = Integer.valueOf(psMap.get("allNum").toString());
//     *         Integer taskNum = Integer.valueOf(psMap.get("taskNum").toString());
//     * @param prompts
//     *
//     * @param modelCode
//     *
//     * @param chatGPT
//     */
//    private  void genAContent(QContent qContent, List<SysDictData> dictModellist, Map<String,Object> psMap, String prompts, String modelCode, ChatGPT chatGPT) {
//        System.out.println("正在使用模型: " + modelCode + " in thread: " + Thread.currentThread().getName());
//        setExcuGenCount(getExcuGenCount()+1);
//        System.out.println("已执行数量："+getExcuGenCount());
//        Message user =  Message.of(prompts);
//        List messagesList  = Arrays.asList(user);
//        chatCompletion = ChatCompletion.builder()
//                .model(modelCode)
////                    .model(ChatCompletion.Model.GPT_3_5_TURBO_16K.getName())
////                    .messages(Arrays.asList(system,user))
//                .messages(messagesList)
////                    .maxTokens(GptHelper.calculateMaxToken(gptTopicTitle.getUseModel()))
//                .maxTokens(2000)
//                .temperature(0.5)
//                .topP(1.0)
//                .build();
//        logger.info("任务生成中...");
//        long startTime = System.currentTimeMillis();
//        ChatCompletionResponse response = chatGPT.chatCompletion(chatCompletion);
//        long endTime = System.currentTimeMillis();
//        long elapsedTime = endTime - startTime;
//        logger.info("生成任务完成！耗时：{}",elapsedTime);
//
//
//        if(ObjectUtils.isEmpty(response.getUsage())){
//            //重试一次
//            if(tryCount<2){
//                genAContent( qContent,dictModellist,psMap,prompts,modelCode,chatGPT);
//                tryCount++;
//                System.out.println("重试次数");
//            }
//
//            logger.error("任务生成失败，请检查余额或者模型是否正确");
//            return ;
//        }
//        tryCount = 0;
//        int thisModelTokenCount = 0;
//        try {
//            thisModelTokenCount = Integer.valueOf(String.valueOf(response.getUsage().getTotalTokens()));
//        }catch (Exception e){
//            logger.error("获取token数量失败:{}",e.getMessage());
//        }
//        //总共花费token
//        tokenCount+=thisModelTokenCount;
////            promptCount+=Integer.valueOf(String.valueOf(response.getUsage().getPromptTokens()));
////            completionCount+= Integer.valueOf(String.valueOf(response.getUsage().getCompletionTokens()));
//
//        Message res = response.getChoices().get(0).getMessage();
//        String acontent = res.getContent();
//        logger.info("使用模型：{}",modelCode+",其中prompts:"+prompts);
//        logger.info("回答：{}",acontent);
//        String qcontentId = psMap.get("qcontentId").toString();
//        String creteBy = psMap.get("creteBy").toString();
//        Integer allNum = Integer.valueOf(psMap.get("allNum").toString());
//        Integer taskNum = Integer.valueOf(psMap.get("taskNum").toString());
//
//        Map<String,Object> map = new HashMap<String,Object>();
//        map.put("acontent",acontent);
//        map.put("qcontentId",qcontentId);
//        map.put("creteBy",creteBy);
//        map.put("modelCode",modelCode);
//        map.put("taskNum",taskNum);
//        map.put("allNum",allNum);
//        for(SysDictData dict:dictModellist){
//            if(dict.getDictValue().equals(modelCode)){
//                map.put("modelName",dict.getDictLabel());
//            }
//        }
////            map.put("modelCode",mode);
//        map.put("tokenCount",tokenCount);
//        map.put("modelTokenCount",thisModelTokenCount);
//        new GenQContentTasker().insertData(qContent,map,taskId);
//    }


}
